package com.practice.springboot_01_zwj.service;

import com.practice.springboot_01_zwj.entity.dto.MainTaskWithSubTasksDTO;
import com.practice.springboot_01_zwj.entity.dto.TaskAllQueryRequest;
import com.practice.springboot_01_zwj.entity.MainTask;
import com.practice.springboot_01_zwj.entity.SubTask;
import org.springframework.core.io.Resource;

import java.util.List;
import java.util.Map;

public interface TaskService {


    // 更新任务
    void updateMainTask(MainTask mainTask);

    // 完成任务
    void completeMainTask(MainTask task);

    // 终止任务
    void terminateMainTask(Integer mainId);

    // 获取执行人的所有任务
    List<MainTask> getTasksByExecutor(String executor);

    // 获取任务详情
    MainTask getTaskDetail(Integer mainId);

    // 计算并更新任务进度和时间进度
    void calculateAndUpdateProgress(Integer mainId);

    /**
     * 删除子任务
     * @param subId 子任务ID
     */
    void deleteSubTask(Integer subId);
    /**
     * 更新子任务进度
     * @param subTask 子任务对象
     */
    void updateSubTaskProgress(SubTask subTask);

    /**
     * 更新主任务进度和状态
     * @param mainId 主任务ID
     */
    void updateMainTaskProgressAndState(Integer mainId);
    // 创建主任务（不含子任务）
    Integer createMainTask(MainTask mainTask);

    // 为主任务添加子任务
    void addSubtasks(Integer mainId, List<SubTask> subTasks);
    // 按派发人分页查询主任务
    Map<String, Object> getMainTasksByDistributor(
            String distributor,
            String mainName,
            String executor,
            Integer taskState,
            String taskType,
            String deptName,
            int pageNum,
            int pageSize
    );

    // 根据执行人分页查询主任务详细信息
    Map<String, Object> getTasksByExecutorOrSubExecutor(
            String currentUser,
            String mainName,
            Integer taskState,
            String taskType,
            String deptName,
            int pageNum,
            int pageSize
    );

    List<MainTaskWithSubTasksDTO> getAllTasksWithDetails(TaskAllQueryRequest request);

    List<SubTask> findSubtasksByMainTaskType(String taskType, String subName);
    /**
     * 获取任务概览信息
     * @param currentUser 当前登录用户
     * @return 包含各种统计数据的Map
     */
    Map<String, Object> getTaskOverview(String currentUser);
}